package ru.payment.wm;

import java.util.Date;

/**
 * User: sergey
 * Date: 09.04.2009
 * Time: 20:29:33
 * 
 */
public interface WebMoneyService {

  /**
   * Интерфейс X1. Выписывание счета от одного участника (магазина, ресурса) другому участнику (покупателю) системы.
   * 
   * @param reqNum номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param orderId номер счета в системе учета магазина; любое целое число без знака
   * @param customerWmId WMId покупателя
   * @param storePurse номер кошелька, но который необходимо оплатить счет
   * @param amount сумма счета, выставленная для оплаты покупателю. число с плавающей точкой (разделитель - .(точка) ) и для десяти с половиной может выглядеть так: 10.5; незначащие нули в конце и точка, если число целое, должны отсутствовать, например, 10.50 - не верно, 10.5 - верно, 9. - не верно, 9 - верно)
   * @param desc описание товара или услуги, на который выписывается счет. произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются, кодировка win-1251
   * @param addr адрес доставки товара. произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются
   * @param period максимально допустимый срок протекции сделки в днях при оплате счета. целое число от 0 до 255; если 0 - протекция сделки при оплате счета не разрешена
   * @param exp
   * @return
   * @throws Exception
   */
  public X1Response invokeX1(String reqNum,
                             String reqWmId,
                             long orderId,
                             String customerWmId,
                             String storePurse,
                             float amount,
                             String desc,
                             String addr,
                             int period,
                             int exp) throws WebMoneyException;

  /**
   * Интерфейс X2. Перевод средств с одного кошелька на другой.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param tranId номер перевода. номер перевода в системе учета отправителя; любое целое число без знака (целое число > 0, максимально 2^31-1), должно быть уникальным (два перевода с одним и тем же tranid невозможен)
   * @param purseSrc номер кошелька с которого выполняется перевод (отправитель)
   * @param purseDesc номер кошелька, но который выполняется перевод (получатель)
   * @param amount переводимая сумма. число с плавающей точкой (разделитель - .(точка) ) и для десяти с половиной может выглядеть так: 10.5; незначащие нули в конце и точка, если число целое, должны отсутствовать, например, 10.50 - не верно, 10.5 - верно, 9. - не верно, 9 - верно)
   * @param period срок протекции сделки в днях. целое от 0 до 255 символов; 0 - без протекции
   * @param pcode код протекции сделки. произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются
   * @param desc описание оплачиваемого товара или услуги. произвольная строка от 0 до 255 символов; пробелы в начале или конце не допускаются
   * @param wmInvoiceId номер счета (в системе WebMoney), по которому выполняется перевод. целое число > 0; если 0 - перевод не по счету; максимально 2^31-1
   * @return
   * @throws Exception
   */
  public X2Response invokeX2(String reqNum,
                             String reqWmId,
                             long tranId,
                             String purseSrc,
                             String purseDesc,
                             float amount,
                             int period,
                             String pcode,
                             String desc,
                             long wmInvoiceId) throws WebMoneyException;

  /**
   * Интерфейс X3. Получение истории операций по кошельку. Проверка выполнения операции по переводу средств между кошельками. 
   * обязательные параметры purse, datestart, datefinish.
   *
   * @param reqNum номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param purse номер кошелька для которого запрашивается операция.
   * @param wmTranId номер операции (в системе WebMoney). целое число > 0, максимально 2^31-1
   * @param tranId номер перевода. номер перевода в системе учета отправителя; любое целое число без знака (см. tranid в интерфейсе X2)
   * @param wmInvoiceId номер счета (в системе WebMoney) по которому выполнялась операция. целое число > 0, максимально 2^31-1
   * @param orderId номер счета.
   * @param dateStart минимальное время и дата выполнения операции. ГГГГММДД ЧЧ:ММ:СС
   * @param dateFinish максимальное время и дата выполнения операции. ГГГГММДД ЧЧ:ММ:СС
   * @return
   * @throws Exception
   */
  public X3Response invokeX3(String reqNum,
                             String reqWmId,
                             String purse,
                             long wmTranId,
                             long tranId,
                             long wmInvoiceId,
                             long orderId,
                             Date dateStart,
                             Date dateFinish) throws WebMoneyException;

  /**
   * Интерфейс X4. Получение истории выписанных счетов по кошельку. Проверка оплаты счета.
   * обязательные параметры purse, datestart, datefinish.
   * 
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param purse номер кошелька для оплаты на который которого выписывался счет
   * @param wmInvoiceId номер счета (в системе WebMoney). целое число > 0, максимально 2^31-1
   * @param orderId номер счета в системе учета магазина
   * @param dateStart минимальное время и дата создания счета 	ГГГГММДД ЧЧ:ММ:СС
   * @param dateFinish максимальное время и дата создания счета 	ГГГГММДД ЧЧ:ММ:СС
   * @return
   * @throws WebMoneyException
   */
  public X4Response invokeX4(String reqNum,
                             String reqWmId,
                             String purse,
                             long wmInvoiceId,
                             long orderId,
                             Date dateStart,
                             Date dateFinish) throws WebMoneyException;

  /**
   * Интерфейс X5. Завершение операции с протекцией сделки. Ввод кода протекции.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param wmTranId
   * @param pcode
   * @return
   * @throws WebMoneyException
   */
  public X5Response invokeX5(String reqNum,
                             String reqWmId,
                             long wmTranId,
                             String pcode) throws WebMoneyException;

  /**
   * Интерфейс X6. Отправка сообщения произвольному WM-идентификатору по внуренней почте WMT.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param receiverWmId
   * @param subject
   * @param text
   * @return
   * @throws WebMoneyException
   */
  public X6Response invokeX6(String reqNum,
                             String reqWmId,
                             String receiverWmId,
                             String subject,
                             String text) throws WebMoneyException;

  /**
   * Интерфейс X7. Проверка аналога АСП клиента - владельца WM Keeper Classic.
   *
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param authWmId
   * @param sign
   * @param plan
   * @return
   * @throws WebMoneyException
   */
  public X7Response invokeX7(String reqWmId,
                             String authWmId,
                             String sign,
                             String plan) throws WebMoneyException;

  /**
   * Интерфейс X8. Получение информации о принадлежности кошелька WM-идентификатору. Поиск участника системы по его идентификатору или кошельку.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId  WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param findWmId
   * @param findPurse
   * @return
   * @throws WebMoneyException
   */
  public X8Response invokeX8(String reqNum,
                             String reqWmId,
                             String findWmId,
                             String findPurse) throws WebMoneyException;

  /**
   * Интерфейс X9. Получение информации о балансе на кошельках.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param infoWmId
   * @return
   * @throws WebMoneyException
   */
  public X9Response invokeX9(String reqNum,
                             String reqWmId,
                             String infoWmId) throws WebMoneyException;

  /**
   * Интерфейс X10. Получение списка счетов на оплату.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId  подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param wmId
   * @param wmInvoiceId
   * @param dateStart
   * @param dateFinish
   * @return
   * @throws WebMoneyException
   */
  public X10Response invokeX10(String reqNum,
                               String reqWmId,
                               String wmId,
                               long wmInvoiceId,
                               Date dateStart,
                               Date dateFinish) throws WebMoneyException;

  /**
   * Интерфейс X11. Получение информации из аттестата клиента по ВМ-идентификатору.
   *
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param passportWmId
   * @param dict
   * @param info
   * @param mode
   * @return
   * @throws WebMoneyException
   */
  public X11Response invokeX11(String reqWmId,
                               String passportWmId,
                               boolean dict,
                               boolean info,
                               boolean mode) throws WebMoneyException;


  /**
   * Интерфейс Х13.Возврат незавершенного платежа с протекцией.
   * 
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param wmTranId
   * @return
   * @throws WebMoneyException
   */
  public X13Response invokeX13(String reqNum,
                               String reqWmId,
                               long wmTranId) throws WebMoneyException;

  /**
   * Интерфейс Х14.Безкомиссионный возврат средств отправителю.
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param wmTranId
   * @param amount
   * @return
   * @throws WebMoneyException
   */
  public X14Response invokeX14(String reqNum,
                               String reqWmId,
                               long wmTranId,
                               float amount) throws WebMoneyException;

  /**
   * Интерфейс X15. Просмотр текущих настроек управления «по доверию».
   * 
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param trustWmId
   * @return
   * @throws WebMoneyException
   */
  public X15ListResponse invokeX15List(String reqNum,
                               String reqWmId,
                               String trustWmId) throws WebMoneyException;

  /**
   * Интерфейс X15. Просмотр текущих настроек управления «по доверию».
   *
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param trustWmId
   * @return
   * @throws WebMoneyException
   */
  public X15ListResponse invokeX15List2(String reqNum,
                               String reqWmId,
                               String trustWmId) throws WebMoneyException;

  /**
   * создание или изменение настроек доверия для определнного кошелька или идентификатора
   * 
   * @param reqNum 	номер запроса. целое без знака, макс. количество цифр - 15; всегда должен быть больше номера предыдущего запроса на выписывание счета!!!
   * @param reqWmId WMId подписавшего запрос. используется только при авторизации с ключами WM Keeper Classic
   * @param allowInvoice
   * @param allowTrans
   * @param allowPurse
   * @param allowTransHist
   * @param masterWmId
   * @param slaveWmId
   * @param purse
   * @param limit
   * @param dayLimit
   * @param weekLimit
   * @param monthLimit
   * @return
   * @throws WebMoneyException
   */
  public X15SaveResponse invokeX15Save(String reqNum,
                               String reqWmId,
                               boolean allowInvoice,
                               boolean allowTrans,
                               boolean allowPurse,
                               boolean allowTransHist,
                               String masterWmId,
                               String slaveWmId,
                               String purse,
                               float limit,
                               float dayLimit,
                               float weekLimit,
                               float monthLimit) throws WebMoneyException;

}
